#include "student.h"
#include "tools.h"

// 显示
char show_s(void)
{
    system("clear");
    puts("---------->>学生系统<<----------");
    puts("|         1、查询成绩          |");
    puts("|         2、个人信息          |");
    puts("|         3、退出系统          |");
    puts("-------------------------------");
    printf("请输入按键");
    char cmd = getch();
    printf("%c\n",cmd);
    return cmd;
}

// 选择
void stu_start(int where_stu)
{
    for(;;)
    {
        switch(show_s())
        {
          	case '1': ser_stu(where_stu);break;
            case '2': show_stu(where_stu);break;
            case '3': stu_exit();return;
        }
    }
}

// 退出
void stu_exit(void)
{
	return;
}
// 显示所有信息
void show_stu(int where_stu)
{
	printf("姓名：%s\n",stu[where_stu].name);
	printf("性别：%c\n",stu[where_stu].sex);
	printf("学号：%d\n",stu[where_stu].id);
	anykey_continue();
	return;
}
// 查询
void ser_stu(int where_stu)
{
	printf("      排名    分数　　平均分　　最低分　　最高分\n");
	printf("语文： %d      %.1lf    %.1lf      %.1lf      %.1lf\n",rank_chn(where_stu),stu[where_stu].chn,ave_chn(),low_chn(),high_chn());
	printf("数学： %d      %.1lf    %.1lf      %.1lf      %.1lf\n",rank_math(where_stu),stu[where_stu].math,ave_math(),low_math(),high_math());
	printf("英语： %d      %.1lf    %.1lf      %.1lf      %.1lf\n",rank_eng(where_stu),stu[where_stu].eng,ave_eng(),low_eng(),high_eng());
	anykey_continue();
	return;

}

// 语文排名
int rank_chn(int where_stu)
{
	int rank_count_chn=1;
	for(int i=0;i<STU_MAX;i++)
	{
		if(stu[i].state=='1')
		{
			if(stu[i].chn>stu[where_stu].chn)
			{
				rank_count_chn++;
			}
		}
	
	}
	return rank_count_chn;
}

// 数学排名
int rank_math(int where_stu)
{
	int rank_count_math=1;
	for(int i=0;i<STU_MAX;i++)
	{
		if(stu[i].state=='1')
		{
			if(stu[i].math>stu[where_stu].math)
			{
				rank_count_math++;
			}
		}
	}
	return rank_count_math;
}

// 英语排名
int rank_eng(int where_stu)
{
	int rank_count_eng=1;
	for(int i=0;i<STU_MAX;i++)
	{
		if(stu[i].state=='1')
		{
			if(stu[i].eng>stu[where_stu].eng)
			{
				rank_count_eng++;
			}
		}
	}
	return rank_count_eng;
}
// 语文平均分
double ave_chn()
{
	double totle_chn=0;
	int totle_stu=0;
	for(int i=0;i<STU_MAX;i++)
	{
		
		if(stu[i].state=='1')
		{
			totle_chn+=stu[i].chn;
			totle_stu++;
		}
	}
	return totle_chn/totle_stu;
}

// 数学平均分
double ave_math()
{
	double totle_math=0;
	int totle_stu=0;
	for(int i=0;i<STU_MAX;i++)
	{
		
		if(stu[i].state=='1')
		{	
			totle_math+=stu[i].math;
			totle_stu++;
		}
	}
	return totle_math/totle_stu;
}

// 英语平均分
double ave_eng()
{
	double totle_eng=0;
	int totle_stu=0;
	for(int i=0;i<STU_MAX;i++)
	{
		if(stu[i].state=='1')
		{
			totle_eng+=stu[i].eng;
			totle_stu++;
		}
	}
	return totle_eng/totle_stu;
}

// 语文最高分
double high_chn()
{
	double high_stu_chn=0;
	for(int i=0;i<STU_MAX;i++)
	{	
		if(stu[i].state=='1')
		{
			if(stu[i].chn>high_stu_chn)
			{
				high_stu_chn=stu[i].chn;
			}
		}
	}
	return high_stu_chn;
}

// 数学最高分
double high_math()
{
	double high_stu_math=0;
	for(int i=0;i<STU_MAX;i++)
	{	
		if(stu[i].state=='1')
		{
			if(stu[i].math>high_stu_math)
			{
				high_stu_math=stu[i].math;
			}
		}
	}
	return high_stu_math;
}

// 英语最高分
double high_eng()
{
	double high_stu_eng=0;
	for(int i=0;i<STU_MAX;i++)
	{	
		if(stu[i].state=='1')
		{
			if(stu[i].eng>high_stu_eng)
			{
				high_stu_eng=stu[i].eng;
			}
		}
	}
	return high_stu_eng;
}

// 语文最低分
double low_chn()
{
	double low_stu_chn=1000;
	for(int i=0;i<STU_MAX;i++)
	{	
		if(stu[i].state=='1')
		{
			if(stu[i].chn<low_stu_chn)
			{
				low_stu_chn=stu[i].chn;
			}
		}
	}
	return low_stu_chn;
}

// 数学最低分
double low_math()
{
	double low_stu_math=1000;
	for(int i=0;i<STU_MAX;i++)
	{	
		if(stu[i].state=='1')
		{
			if(stu[i].math<low_stu_math)
			{
				low_stu_math=stu[i].math;
			}
		}
	}
	return low_stu_math;
}

// 英语最低分
double low_eng()
{
	double low_stu_eng=1000;
	for(int i=0;i<STU_MAX;i++)
	{	
		if(stu[i].state=='1')
		{
			if(stu[i].eng<low_stu_eng)
			{
				low_stu_eng=stu[i].eng;
			}
		}
	}
	return low_stu_eng;
}

// 修改密码
void change_stu_pw(int stu_count_num)
{
	char change_save_one[17]={};
	char change_save_two[17]={};
	for(;;)
	{
		printf("请输入修改的密码：");
		get_pw(change_save_one);
		printf("\n请确认密码：");
		get_pw(change_save_two);
		if(strcmp(change_save_one,change_save_two))
		{
			printf("两次密码不一致请重新输入！\n");
			continue;
		}
		if(strlen(change_save_two)<6)
		{
			printf("密码长度过短请重新输入！\n");
			continue;
		}
		if(0==strcmp(change_save_two,STU_INI_PW))
		{
			printf("\n密码与原始密码一致，请重新修改！\n");
			continue;
		}
		strcpy(stu[stu_count_num].pw,change_save_two);
		save_in_stu();
		return;
	}
}

// 登录
void stu_login(void)
{
    int id__stu=0;
    char key[17]={};
    load_in_stu();
	load_out_stu();
	for(;;)
	{
		system("clear");
		printf("请输入学号：");
		scanf("%d",&id__stu);
		printf("(友情提示：密码长度６～１６，可包含数字、字母)\n");
		printf("请输入密码：");
		get_pw(key);
		for(int i=0;i<STU_MAX;i++)
		{	
			if(!stu[i].sex)
			{
				puts("\n查无此人！");
				printf("请确认学号是否正确!");
				anykey_continue();
				return;
			}
			if(stu[i].id==id__stu)
			{
				if(stu[i].lock == 3)
				{
					show_msg("\n你的账号已被锁定！",3);
					return;
				}
				if(stu[i].state == '2')
				{
					show_msg("\n您已离校无法登录！",3);
					return;
				}
				if(strcmp(stu[i].pw,key))
				{
					printf("\n账号或密码错误，请重新输入！\n");
					stu[i].lock++;
					save_in_stu();
					anykey_continue();
					break;
				}
				else
				{
					stu[i].lock=0;
					if(strcmp(key,STU_INI_PW)==0)
					{
						printf("\n第一次登陆请修改密码!\n");
						printf("(友情提示：密码长度６～１６，可包含数字、字母)\n");
			   			change_stu_pw(i);
			   		}	
					stu_start(i);
					return;
				}
			}

		}
	}
}
